#include <string>
#include <sstream>


struct Particle
{
    Particle()
        : x(0), 
          y(0), 
          z(0)
    {
    }
    
    Particle(const Particle& other)
        : id(other.id), 
          x(other.x), 
          y(other.y), 
          z(other.z)
    {
    }
    
    Particle(const std::string& id, const std::string& fqn, float x, float y, float z)
        : id(id), 
          fqn(fqn), 
          x(x), 
          y(y), 
          z(z)
    {
    }

    Particle(const std::string& id, const std::string& fqn)
        : id(id), 
          fqn(fqn)
    {
    }

    void setPosition(float newx, float newy, float newz)
    {
        x = newx;
        y = newy;
        z = newz;
    }

    Particle* clone() const
    {
        return new Particle(*this);
    }

    std::string id;
    // Fully qualified name. Unique id for an atom in a residue (i.e. you could
    // find two atoms of type "C" but both of them will have != fqn
    std::string fqn;
    
    float x, y, z;
};